home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-01-14 | 1.2 KB | 57 lines | [TEXT/R*ch] |
- # module 'fnmatch' -- filename matching with shell patterns
- # This version translates the pattern to a regular expression
- # and moreover caches the expressions.
-
- import os
- import regex
-
- cache = {}
-
- def fnmatch(name, pat):
- name = os.path.normcase(name)
- pat = os.path.normcase(pat)
- if not cache.has_key(pat):
- res = translate(pat)
- save_syntax = regex.set_syntax(0)
- cache[pat] = regex.compile(res)
- save_syntax = regex.set_syntax(save_syntax)
- return cache[pat].match(name) == len(name)
-
- def translate(pat):
- i, n = 0, len(pat)
- res = ''
- while i < n:
- c = pat[i]
- i = i+1
- if c == '*':
- res = res + '.*'
- elif c == '?':
- res = res + '.'
- elif c == '[':
- j = i
- if j < n and pat[j] == '!':
- j = j+1
- if j < n and pat[j] == ']':
- j = j+1
- while j < n and pat[j] != ']':
- j = j+1
- if j >= n:
- res = res + '\\['
- else:
- stuff = pat[i:j]
- i = j+1
- if stuff[0] == '!':
- stuff = '[^' + stuff[1:] + ']'
- elif stuff == '^'*len(stuff):
- stuff = '\\^'
- else:
- while stuff[0] == '^':
- stuff = stuff[1:] + stuff[0]
- stuff = '[' + stuff + ']'
- res = res + stuff
- elif c in '\\.+^$':
- res = res + ('\\' + c)
- else:
- res = res + c
- return res
-